package br.com.proescola.dao;

import br.com.proescola.modelo.Aluno;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;

public class AlunoDAO {

    private Connection conexao;
    //private PreparedStatement stmt;

    public AlunoDAO() throws SQLException {
        this.conexao = CriaConexao.getConexao(); //Istancia um objeto Connection, que é o parâmetro da classe CriaConexao.java
    }

    public void cadastrar(Aluno a1) throws SQLException {
        //Prepara a estrutura da Query e declara o objeto PreparedStatement
        String sql = "INSERT INTO aluno (ra_aluno, nm_aluno, data_aluno, rg_aluno, cpf_aluno, ic_sexo_masculino_feminino, endereco_aluno, bairro_aluno, cidade_aluno, telefone_aluno, celular_aluno, cep_aluno, obs_aluno, cd_curso_cd) VALUES (?,?,?,?,?,?,?,?,?,?,?,?,?,?)";
        PreparedStatement stmt = conexao.prepareStatement(sql);
        String ret = "erro";
        //Seta os valores que vão ser inseridos na Query
        stmt.setString(1, a1.getRa());
        stmt.setString(2, a1.getNome());
        stmt.setString(3, a1.getDataDeNascimento().toString());
        stmt.setString(4, a1.getRg());
        stmt.setString(5, a1.getCpf());
        stmt.setString(6, a1.getSexo());
        stmt.setString(7, a1.getEndereco());
        stmt.setString(8, a1.getBairro());
        stmt.setString(9, a1.getCidade());
        stmt.setString(10, a1.getTelefone());
        stmt.setString(11, a1.getCelular());
        stmt.setString(12, a1.getCep());
        stmt.setString(13, a1.getObservacao());
        stmt.setString(14, a1.getCodigoCurso());
        //Executa a inserção SQL
        stmt.execute();
        stmt.close();

    }

    public List<Aluno> getLista() throws SQLException {
        String sql = "SELECT * FROM aluno";
        PreparedStatement stmt = this.conexao.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();

        List<Aluno> alunos = new ArrayList<Aluno>();
        while (rs.next()) {
            Aluno a1 = new Aluno();
            a1.setId(Long.parseLong(rs.getString("cd_aluno")));
            a1.setRa(rs.getString("ra_aluno"));
            a1.setNome(rs.getString("nm_aluno"));
            a1.setDataDeNascimento(rs.getString("data_aluno"));
            a1.setRg(rs.getString("rg_aluno"));
            a1.setCpf(rs.getString("cpf_aluno"));
            a1.setSexo(rs.getString("ic_sexo_masculino_feminino"));
            a1.setEndereco(rs.getString("endereco_aluno"));
            a1.setBairro(rs.getString("bairro_aluno"));
            a1.setCidade(rs.getString("cidade_aluno"));
            a1.setTelefone(rs.getString("telefone_aluno"));
            a1.setCelular(rs.getString("celular_aluno"));
            a1.setCep(rs.getString("cep_aluno"));
            a1.setObservacao(rs.getString("obs_aluno"));
            a1.setCodigoCurso(rs.getString("cd_curso_cd"));
            alunos.add(a1);
        }
        rs.close();
        stmt.close();
        return alunos;
    }

    public void altera(Aluno a1) throws SQLException {
        String sql = "UPDATE aluno set ra_aluno=?, nm_aluno=?, rg_aluno=?, cpf_aluno=?, ic_sexo_masculino_feminino=?, endereco_aluno=?, bairro_aluno=?, cidade_aluno=?, telefone_aluno=?, celular_aluno=?, cep=?, obs_aluno=?, cd_curso_cd=?, data_aluno=? where cd_aluno=?";
        PreparedStatement stmt = conexao.prepareStatement(sql);
        stmt.setString(1, a1.getRa());
        stmt.setString(2, a1.getNome());
        stmt.setString(3, a1.getRg());
        stmt.setString(4, a1.getCpf());
        stmt.setString(5, a1.getSexo());
        stmt.setString(6, a1.getEndereco());
        stmt.setString(7, a1.getBairro());
        stmt.setString(8, a1.getCidade());
        stmt.setString(9, a1.getTelefone());
        stmt.setString(10, a1.getCelular());
        stmt.setString(11, a1.getCep());
        stmt.setString(12, a1.getObservacao());
        stmt.setString(13, a1.getCodigoCurso());
        stmt.setString(14, a1.getDataDeNascimento().toString());
        stmt.setLong(15, a1.getId());
        //executa o PreparedStatement
        stmt.execute();
        stmt.close();
    }

    public void remove(Aluno a1) throws SQLException {
        String sql = "DELETE FROM aluno where id=?";
        PreparedStatement stmt = conexao.prepareStatement(sql);
        stmt.setLong(1, a1.getId());
        //executa o prepared statement
        stmt.execute();
        stmt.close();
    }

    public void removeById(long id) throws SQLException {
        String sql = "DELETE FROM aluno where cd_aluno=?";
        PreparedStatement stmt = conexao.prepareStatement(sql);
        stmt.setLong(1, id);
        stmt.execute();
        stmt.close();
    }

    public List<Aluno> getById(String x) throws SQLException {
        String sql = "SELECT * FROM aluno WHERE nm_aluno LIKE ?";
        PreparedStatement stmt = this.conexao.prepareStatement(sql);
        stmt.setString(1, ("%" + x + "%"));
        ResultSet rs = stmt.executeQuery();

        List<Aluno> alunos = new ArrayList<Aluno>();
        while (rs.next()) {
            Aluno a1 = new Aluno();
            a1.setId(Long.parseLong(rs.getString("cd_aluno")));
            a1.setRa(rs.getString("ra_aluno"));
            a1.setNome(rs.getString("nm_aluno"));
            a1.setDataDeNascimento(rs.getString("data_aluno"));
            a1.setRg(rs.getString("rg_aluno"));
            a1.setCpf(rs.getString("cpf_aluno"));
            a1.setSexo(rs.getString("ic_sexo_masculino_feminino"));
            a1.setEndereco(rs.getString("endereco_aluno"));
            a1.setBairro(rs.getString("bairro_aluno"));
            a1.setCidade(rs.getString("cidade_aluno"));
            a1.setTelefone(rs.getString("telefone_aluno"));
            a1.setCelular(rs.getString("celular_aluno"));
            a1.setCep(rs.getString("cep_aluno"));
            a1.setObservacao(rs.getString("obs_aluno"));
            a1.setCodigoCurso(rs.getString("cd_curso_cd"));
            alunos.add(a1);
        }
        rs.close();
        stmt.close();
        return alunos;
    }
}
